import axios from 'axios';
import { ElMessage, ElMessageBox } from 'element-plus';
import router from '@/router';
import { userStores } from '@/stores';
// const baseURL = 'http://127.0.0.1:9527';
const baseURL = 'https://api.scwff.com';
const http = axios.create({
	baseURL: baseURL,
	timeout: 30000,
	headers: {
		Accept: 'application/json',
		'X-Requested-With': 'XMLHttpRequest',
	},
});
// 添加请求拦截器
http.interceptors.request.use(
	function (config) {
		// 在发送请求之前做些什么
		const store = userStores();
		const token = store.system.token;
		if (token) {
			config.headers['Authorization'] = token;
		}
		return config;
	},
	function (error) {
		// 对请求错误做些什么
		return Promise.reject(error);
	}
);

// 添加响应拦截器
http.interceptors.response.use(
	function (response) {
		// 2xx 范围内的状态码都会触发该函数。
		// 对响应数据做点什么
		const resData = response.data;
		if (resData.code != 200) {
			console.log(resData);
			if (resData.data.orig) {
				if (resData.data.orig.msg.includes('唯一账号')) {
					ElMessage.error('账号已存在');
				}
			} else {
				if (resData.code != 202) {
					ElMessage.error(resData.message);
				}
			}

			errors(resData.code, resData.message);
			return Promise.reject(resData);
			// return;
		}
		return response.data;
	},
	function (error) {
		// 超出 2xx 范围的状态码都会触发该函数。
		// 对响应错误做点什么
		//超时处理
		// console.log(error.response.data);
		if (String(error).includes('timeout')) {
			ElMessage.error('请求超时!');
		}
		if (String(error).includes('Network')) {
			ElMessage.error('网络错误!');
		}
		return Promise.reject(error);
	}
);
export default http;
// 错误处理
function errors(code: number | string, message: string) {
	switch (code) {
		case 205:
			// token到期
			ElMessageBox.confirm('token已过期，请重新登录！', '系统提示', {
				confirmButtonText: '确定',
				cancelButtonText: '取消',
				type: 'warning',
			}).then(() => {
				sessionStorage.clear();
				// console.log(router);
				router.replace('/login');
				setTimeout(() => {
					window.location.reload();
				}, 100);
			});

			break;
		case 202:
			ElMessageBox.alert(message, '系统提示', {
				confirmButtonText: '确定',
				type: 'error',
				callback: () => {},
			});

			break;
		default:
			console.log(code);
	}
}
